//
// Created by twetec on 25-7-21.
//

#ifndef NETWORK_PROBER_UTILS_CONSTANTS_H
#define NETWORK_PROBER_UTILS_CONSTANTS_H

/**
  * 原理：inline 变量允许在多个翻译单元（.cpp文件）中存在同名定义，链接器会自动合并。
  *  优点：无需单独的.cpp文件，代码更简洁。
  *  限制：需要编译器支持 C++17（如 GCC 7+、Clang 5+、MSVC 19.15+）。
  *  优先使用 inline 变量（如果环境支持 C++17），代码最简洁。
  *  兼容性要求高时，使用 extern + .cpp 的传统方式。
  *  仅需单文件内使用时，可用 static 变量简化代码。
  *  通过命名空间结合上述方法，既能组织代码，又能避免重复定义问题。
  */

namespace network_prober::utils
{
// libmongoc初始化程序，只执行一次
inline std::once_flag g_mongoClientInitOnceFlag;
// mongoc客户端初始化锁
inline pthread_mutex_t g_mongoClientInitMutex = PTHREAD_MUTEX_INITIALIZER;

// libmongoc初始化程序，只执行一次
inline std::once_flag g_sqlServerClientInitOnceFlag;

}

#endif //NETWORK_PROBER_UTILS_CONSTANTS_H
